The present invention relates to maintaining parity information on multiple blocks of data and in particular to the storage of such parity information.
U.S. Pat. No. 4,092,732 to Ouchi describes a check sum generator for generating a check sum segment from segments of a system record as the system record segments are being transferred between a storage subsystem and a central processing unit. The check sum segment is actually a series of parity bits generated from bits in the same location of the system record segments. In other words, each bit, such as the first bit of the check sum segment is the parity of the group of first bits of the record segments. When a storage unit containing a record segment fails, the record segment is regenerated from the check sum segment and the remaining system segments. One storage unit is selected for containing all the check sum segments for a plurality of record storage units.
In the Ouchi patent, the check sum segment is always generated from reading all the record segments it covers. If one record segment is changed, all the record segments covered are read and the checksum segment is generated. An IBM Technical Disclosure Bulletin, Vol. 24, No. 2, July 1981, pages 986-987, Efficient Mass Storage Parity Recovery Mechanism, improves upon the generation of the checksum segment, or parity segment by copying a record segment before it is changed. The copy of the record segment is then exclusive-ORed with the changed record segment to create a change mask. The parity segment is then read and exclusive-ORed with the change mask to generate the new parity segment which is then written back out to the storage unit.
While a number of reads on record segments that are not changed is avoided in the prior art, a single storage unit is used to store parity segments for multiple record segments on multiple storage devices. A read and a write on the single storage unit occurs each time a record is changed on any of the storage units covered by the parity record on the single storage unit. Thus, the single storage unit becomes a bottle-neck to storage operations since the number of changes to records which can be made per unit of time is a function of the access rate of the single storage unit as opposed to the faster access rate provided by parallel operation of the multiple storage units.
Recovery of a lost record depends on the synchronization of the parity record with each of the data records that it covers. Without special hardware, such as non-volatile storage, and/or additional write operations to storage units, it is difficult to guarantee that both the data records and parity record are updated to a consistent state if the system terminates abnormally. Since two I/O operations are required to update the data and its associated parity, it is difficult to determine which I/O operation has completed following the system termination.